package ch5oopexer1;

//存在问题：数组扩容后新加的顾客信息，显示不出来（空指针异常）————》当扩容结束时不要·返回true,且开户操作不要用else if，
/*3:在超市会员卡那题的基础上 ，实现如下的功能：
   1）把会员类按照封装的规则进行改动。限制新会员的积分不能超过600.
   2）新增会员卡的时候，如果已满（比如数组的大小是20，已经放了20），
   实现给数组扩容（提示:新建一个更大的数组，把原来的对象放入）*/
public class Market {
    String marketName;
    String address;
    VIP[] vip;
    int acoount = 0;

    public boolean add(VIP v) {
        if(acoount>vip.length-1){//数组扩容
            VIP[] viparr = new VIP[vip.length+10];
            for(int i=0;i<vip.length;i++){
                viparr[i]=vip[i];
            }
            vip=viparr;//将viparr的地址值赋给vip
            //return true;//为了使新加的客户能够显现，这里了的return不能要，此外要把下面的esle if 改成if(为什么，虽然加了return
            //后能够返回真，但是后面的acoount++是在else if中呀！所以要两证兼备就才用了这个方法好好揣摩，可以改改company试试)

        /*}else if (vip[acoount] == null) {*///
        }
        if (vip[acoount] == null) {

           /* if(acoount<vip.length){
                boolean isRepead = checkCardNoRepeat(vip[acoount].getNumber()){//此时都是私有的话，要怎么才能判重呢?
                    if(isRepead==true){
                        return false;//名字重复就不会成功
                    }
                }
            }*/
           vip[acoount] = v;
            acoount++;
            return true;
        }
        return false;
    }

    public void show() {
        System.out.println("商场：" + marketName);
        System.out.println("商场地址：" + address);
        System.out.println("会员信息如下：");
        for(int i=0;i<acoount;i++) {
            System.out.println("会员号：" + vip[i].getNumber() + " ，姓名：" + vip[i].getName() +
                    " ,手机号：" + vip[i].getPhone() + " ，积分：" + vip[i].getScore());

        }
    }

    /* 1: 尝试加方法：给某一用户涨分的方法。
     方法声明如右： boolean inc(String cardNo,int fen)：如果帐号不存在，返回false*/
    boolean inc(String number, double score) {
        for (int i = 0; i < acoount; i++) {//存在一个问题，当添加的人数超过数组长度不会提示！！！！这个问题会影响到这个方法！！(所以在一开始就判空)
//        if(vip[acoount]==null){
//            return false;
//        }
            if (number.equals(vip[i].getNumber())) {
                vip[i].setScore(vip[i].getScore()+score);
               // vip[i].score += score;

                return true;
            }
        }
        System.out.println("账户不存在！无法增加积分！");
        return false;
    }

    /*2*：增加新会员方法中添加判断，添加新会员时限制会员号不能重复，如果重复，禁止添加。
    提示：添加方法 boolean checkCardNoRepeat(String no)判断是否重复，如果返回true,则重复。*/
    boolean checkCardNoRepeat(String number){
        for(int j=0;j<acoount;j++){//你这里完全可以只取判断结果，然后拿着结果到add里去做
            if(number.equals(vip[j].getNumber())){
                System.out.println("会员号已经存在，无法添加！");
                return true;
            }
        }
        return false;
    }

    /**
     *
     * cardNo 定义兑换礼品的方法
     *   假设
     *      1：100分兑换餐巾纸一包；
     *      2：400分兑换剃须刀一把；
     *      3：1000分兑换炒锅一个；
     *  用户输入卡号和需要兑换的奖品，兑换成功后扣除相应积分(礼品类不需要定义，用String返回即可)；如果帐号不存在，或者积分不够，兑换失败(提示:如果兑换成功,需要扣除相应的积分)。
     *   如果不成功，返回null。
     *
     */
    public String duihuan(String number,int lipingleixing){
        for(int k=0;k<acoount;k++){
            if (number.equals(vip[k].getNumber()) && vip[k].getScore() >= 100) {
                if(lipingleixing==1){
                    vip[k].setScore(vip[k].getScore()-100);
                    //vip[k].score -=100;
                    System.out.println("成功兑换了餐巾纸一包，您剩余的积分为："+ vip[k].getScore());
                }if(lipingleixing==2){
                    vip[k].setScore(vip[k].getScore()-400);
                    //vip[k].score  -=400;
                    System.out.println("成功兑换了剃须刀一把，您剩余的积分为："+ vip[k].getScore());
                }if(lipingleixing==3){
                    vip[k].setScore(vip[k].getScore()-1000);
                    //vip[k].score  -=1000;
                    System.out.println("成功兑换了炒锅一个；，您剩余的积分为："+ vip[k].getScore());
                }
                return "Y";
            }
            // continue;
                /*else {//这里加else的话就会使程序只能让第一个顾客兑换，其他的兑换不了！
                    return null;
                }*/
        }

        return null;
    }
}
